/**
 * 预约看房功能测试工具
 * 用于测试前后端联调功能
 */

import { bookRentRoomApi, getBookRentRoomListApi, cancelBookingApi, getBookingStatsApi } from '@/api/booking'

/**
 * 测试预约看房API
 */
export const testBookingAPI = async () => {
  console.log('=== 开始测试预约看房API ===')
  
  try {
    // 测试数据
    const testBookingData = {
      name: '测试用户',
      phone: '13800138000',
      date: '2024-12-26',
      comment: '希望下午看房',
      houseId: '1'
    }
    
    console.log('1. 测试提交预约看房...')
    const bookingResult = await bookRentRoomApi(testBookingData)
    console.log('预约结果:', bookingResult)
    
    if (bookingResult && bookingResult.data && bookingResult.data.success) {
      console.log('✅ 预约看房测试成功')
      return bookingResult.data.id
    } else {
      console.log('❌ 预约看房测试失败')
      return null
    }
  } catch (error) {
    console.error('❌ 预约看房测试出错:', error.message)
    return null
  }
}

/**
 * 测试获取预约列表API
 */
export const testGetBookingListAPI = async () => {
  console.log('=== 开始测试获取预约列表API ===')
  
  try {
    console.log('2. 测试获取预约列表...')
    const listResult = await getBookRentRoomListApi()
    console.log('预约列表:', listResult)
    
    if (Array.isArray(listResult)) {
      console.log('✅ 获取预约列表测试成功，共', listResult.length, '条记录')
      return listResult
    } else {
      console.log('❌ 获取预约列表测试失败：返回数据格式错误')
      return []
    }
  } catch (error) {
    console.error('❌ 获取预约列表测试出错:', error.message)
    return []
  }
}

/**
 * 测试取消预约API
 */
export const testCancelBookingAPI = async (bookingId) => {
  console.log('=== 开始测试取消预约API ===')
  
  if (!bookingId) {
    console.log('❌ 无有效的预约ID，跳过取消预约测试')
    return false
  }
  
  try {
    console.log('3. 测试取消预约...')
    const cancelResult = await cancelBookingApi(bookingId)
    console.log('取消结果:', cancelResult)
    
    if (cancelResult && cancelResult.message) {
      console.log('✅ 取消预约测试成功')
      return true
    } else {
      console.log('❌ 取消预约测试失败')
      return false
    }
  } catch (error) {
    console.error('❌ 取消预约测试出错:', error.message)
    return false
  }
}

/**
 * 测试获取预约统计API
 */
export const testGetBookingStatsAPI = async () => {
  console.log('=== 开始测试获取预约统计API ===')
  
  try {
    console.log('4. 测试获取预约统计...')
    const statsResult = await getBookingStatsApi()
    console.log('统计结果:', statsResult)
    
    if (statsResult && typeof statsResult.total === 'number') {
      console.log('✅ 获取预约统计测试成功')
      return statsResult
    } else {
      console.log('❌ 获取预约统计测试失败：返回数据格式错误')
      return null
    }
  } catch (error) {
    console.error('❌ 获取预约统计测试出错:', error.message)
    return null
  }
}

/**
 * 运行所有测试
 */
export const runAllBookingTests = async () => {
  console.log('🚀 开始运行预约看房功能完整测试')
  console.log('注意：请确保后端服务已启动并运行在 http://localhost:3000')
  console.log('='.repeat(50))
  
  // 测试1: 提交预约
  const bookingId = await testBookingAPI()
  
  // 测试2: 获取预约列表
  const bookingList = await testGetBookingListAPI()
  
  // 测试3: 获取预约统计
  const stats = await testGetBookingStatsAPI()
  
  // 测试4: 取消预约（如果有预约ID）
  let cancelSuccess = false
  if (bookingId) {
    cancelSuccess = await testCancelBookingAPI(bookingId)
  } else if (bookingList.length > 0) {
    // 如果没有新创建的预约ID，尝试取消列表中的第一个
    cancelSuccess = await testCancelBookingAPI(bookingList[0].id)
  }
  
  console.log('='.repeat(50))
  console.log('📊 测试结果汇总:')
  console.log('- 提交预约:', bookingId ? '✅ 成功' : '❌ 失败')
  console.log('- 获取列表:', bookingList.length >= 0 ? '✅ 成功' : '❌ 失败')
  console.log('- 获取统计:', stats ? '✅ 成功' : '❌ 失败')
  console.log('- 取消预约:', cancelSuccess ? '✅ 成功' : '❌ 失败')
  
  const successCount = [
    bookingId ? 1 : 0,
    bookingList.length >= 0 ? 1 : 0,
    stats ? 1 : 0,
    cancelSuccess ? 1 : 0
  ].reduce((a, b) => a + b, 0)
  
  console.log(`\n🎯 总体结果: ${successCount}/4 项测试通过`)
  
  if (successCount === 4) {
    console.log('🎉 所有测试通过！前后端联调成功！')
  } else {
    console.log('⚠️  部分测试失败，请检查后端服务状态和接口实现')
  }
  
  return {
    success: successCount === 4,
    results: {
      booking: !!bookingId,
      list: bookingList.length >= 0,
      stats: !!stats,
      cancel: cancelSuccess
    }
  }
}

/**
 * 在浏览器控制台中运行测试
 * 使用方法：在浏览器控制台中输入 window.testBookingAPI()
 */
if (typeof window !== 'undefined') {
  window.testBookingAPI = runAllBookingTests
  console.log('💡 提示：在浏览器控制台中输入 window.testBookingAPI() 来运行测试')
}
